home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 13288 / 13288.xpi / content / key.js < prev    next >
Text File  |  2010-01-24  |  6KB  |  138 lines

  1. var gKeyPressedShow, gKeyPressedSave, gBosskey;
  2. var gHotkeys = new Array();
  3.  
  4. function onLoad() {
  5.     getHotkeys();
  6. }
  7.  
  8. function getHotkeys() {
  9.     var mw = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator).getMostRecentWindow("navigator:browser");
  10.     var topmenuid = new Array("file-menu", "edit-menu", "view-menu", "history-menu", "bookmarksMenu", "tools-menu", "helpMenu");
  11.     for (var i = 0; i < topmenuid.length; i++) {
  12.         var menu = mw.document.getElementById(topmenuid[i]);
  13.         gHotkeys.push("[+]" + menu.getAttribute("accesskey").toUpperCase() + "[+]alt|:|[" + menu.label + "]");
  14.     }
  15.  
  16.     var tmenuitems = mw.document.getElementsByTagName("menuitem");
  17.     var menuitems = new Array();
  18.     for (var i = 0; i < tmenuitems.length; i++)
  19.         if (tmenuitems[i].hasAttribute("key")) menuitems.push(tmenuitems[i]);
  20.  
  21.     var tabContextMenu = mw.gBrowser.mStrip.firstChild.nextSibling;
  22.     tmenuitems = tabContextMenu.getElementsByTagName("menuitem");
  23.     for (var i = 0; i < tmenuitems.length; i++)
  24.         if (tmenuitems[i].hasAttribute("key")) menuitems.push(tmenuitems[i]);
  25.  
  26.     var keys = mw.document.getElementsByTagName("key");
  27.     for(var i = 0, l = keys.length; i < l; i++) {
  28.         var keypressed = "";
  29.         var array = new Array();
  30.         var tmodifiers = keys[i].hasAttribute("modifiers")?keys[i].getAttribute("modifiers").replace("accel", "control"):"";
  31.         if (tmodifiers.indexOf("control") >= 0) array.push("control");
  32.         if (tmodifiers.indexOf("shift") >= 0) array.push("shift");
  33.         if (tmodifiers.indexOf("alt") >= 0) array.push("alt");
  34.         if (tmodifiers.indexOf("meta") >= 0) array.push("meta");
  35.         var modifiers = array.join(",");
  36.         if (keys[i].hasAttribute("keycode")) 
  37.             keypressed = keys[i].getAttribute("keycode") + "[+][+]";
  38.         else if (keys[i].hasAttribute("key")) {
  39.             keypressed = "[+]" + keys[i].getAttribute("key").toUpperCase() + "[+]";
  40.         }
  41.         if (modifiers) keypressed = keypressed + modifiers;
  42.         
  43.         var whatkey;
  44.         for (var j = 0; j < menuitems.length; j++) {
  45.             if (menuitems[j].getAttribute("key") == keys[i].id) {
  46.                 whatkey = menuitems[j].label;
  47.                 break;
  48.             }
  49.         }
  50.         if (!whatkey) {
  51.             if (keys[i].hasAttribute("keytext")) 
  52.                 whatkey = keys[i].getAttribute("keytext");
  53.             else if (keys[i].hasAttribute("oncommand"))
  54.                 whatkey = keys[i].getAttribute("oncommand");
  55.             else if (keys[i].hasAttribute("id")) {
  56.                 whatkey = keys[i].getAttribute("id");
  57.                 if (whatkey.substr(0, 4) == "key_") whatkey = whatkey.substring(4);
  58.             }
  59.         }
  60.         gHotkeys.push(keypressed + "|:|" + (whatkey?"["+whatkey+"]":""));
  61.     }
  62. }
  63.  
  64. function recognize(e) {
  65.     e.preventDefault();
  66.     e.stopPropagation();
  67.     gKeyPressedShow = getKeyPressed(e, true);
  68.     gKeyPressedSave = getKeyPressed(e, false);
  69.     document.getElementById("keyinputbox").value = gKeyPressedShow;
  70. }
  71.  
  72. function getKeyPressed(e, toshow) {
  73.     var keypressed = "";
  74.     var array = new Array();
  75.     if(e.ctrlKey)  array.push(toshow?"Ctrl" :"control");
  76.     if(e.shiftKey) array.push(toshow?"Shift":"shift");
  77.     if(e.altKey)   array.push(toshow?"Alt"  :"alt");
  78.     if(e.metaKey)  array.push(toshow?"Meta" :"meta");
  79.     var modifiers = array.join(toshow?" + ":",");
  80.     if (e.keyCode) {
  81.         for (var property in KeyEvent) {
  82.             if (KeyEvent[property] == e.keyCode) {
  83.                 keypressed = toshow?property.replace("DOM_VK_", ""):(property.replace("DOM_", "") + "[+][+]");
  84.                 break;
  85.             }
  86.         }
  87.     } else if (e.charCode) {
  88.         var key = String.fromCharCode(e.charCode);
  89.         keypressed = toshow?(key.toUpperCase()):("[+]" + key.toUpperCase() + "[+]");
  90.     }
  91.     if (modifiers != "") keypressed = toshow?(modifiers + " + " + keypressed):(keypressed + modifiers);
  92.     return keypressed;
  93. }
  94.  
  95. function getKeycode(e) {
  96.     var co = e.keyCode;
  97.     if (co == 17 || co == 16 || co == 18 || co == 224) return; //Ctrl,Shift,Alt,Meta
  98.     gBosskey = e.keyCode;
  99. }
  100.  
  101. function onAccept(e) {
  102.     var eid = window.arguments[0];
  103.     if (eid != "e.bosskey.showkey") {
  104.         var duplicate = duplicatedHotkey(gKeyPressedSave);
  105.         if (duplicate) {
  106.             var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService);
  107.             var strings = document.getElementById("key.stringmanager");
  108.             if(!prompts.confirm(null, strings.getString("key.duplicated.title"), strings.getString("key.duplicated") + duplicate + "\n ")) {
  109.                 document.getElementById("keyinputbox").focus();
  110.                 return false;
  111.             }
  112.         }
  113.     }
  114.     window.opener.document.getElementById(eid).value = gKeyPressedShow;
  115.     switch (eid) {
  116.       case "e.block.hotkey":
  117.           window.opener.stmPref.gBlockHotkey = gKeyPressedShow + "|:|" + gKeyPressedSave;
  118.           break;        
  119.       case "e.pagelock.hotkey":
  120.           window.opener.stmPref.gPageLockHotkey = gKeyPressedShow + "|:|" + gKeyPressedSave;
  121.           break;        
  122.       case "e.bosskey.hidekey":
  123.           window.opener.stmPref.gBosskeyHidekey = gKeyPressedShow + "|:|" + gKeyPressedSave;
  124.           break;        
  125.       case "e.bosskey.showkey":
  126.           window.opener.stmPref.gBosskeyShowkey = gKeyPressedShow + "|:|" +  gBosskey + "[+]" + gKeyPressedSave.split("[+]")[2];
  127.           break;        
  128.     }
  129. }
  130.  
  131. function duplicatedHotkey(photkey) {
  132.     for (var i = 0; i < gHotkeys.length; i++ ) {
  133.         var hotkey = gHotkeys[i].split("|:|");
  134.         if (photkey == hotkey[0]) return hotkey[1];
  135.     }
  136.     return "";
  137. }
  138.